package cn.broadsense.web.controller.body;

import cn.broadsense.common.annotation.BigDecimalRange;
import cn.broadsense.common.annotation.ValueInEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author huangjinshi
 * @description
 * @createDate 2024-09-19 16:52:26
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("标签信息")
public class DataItemCollectDataBody implements Serializable {

    @ApiModelProperty("设备名称")
    @Size(min = 0, max = 64, message = "设备名称字符长度不能超过64个字符")
    private String deviceName;

    @ApiModelProperty("监控点位编号")
    @Size(min = 0, max = 64, message = "监控点位编号字符长度不能超过64个字符")
    private String channelCode;

    @ApiModelProperty("管理单位")
    @Size(min = 0, max = 64, message = "管理单位字符长度不能超过64个字符")
    @ValueInEnum(allowedStringValues = {"路面", "派出所", "交警队", "公安局", "警务区", "重保区域", "4G巡逻车", "铁路派出所"})
    private String managementUnit;

    @ApiModelProperty("设备型号")
    @Size(min = 0, max = 64, message = "设备型号字符长度不能超过64个字符")
    private String deviceModel;

    @ApiModelProperty("设备类型")
    @Size(min = 0, max = 32, message = "设备类型字符长度不能超过32个字符")
    @ValueInEnum(message = "请正确选择设备类型", allowedStringValues = {"固定枪机", "遥控枪机", "卡口枪机", "快球", "半球", "鹰眼", "云台相机", "未知"})
    private String deviceType;

    @ApiModelProperty("设备厂商")
    @Size(min = 0, max = 32, message = "设备厂商字符长度不能超过32个字符")
    @ValueInEnum(allowedStringValues = {"海康威视", "大华股份", "天地伟业", "韩华商业", "英飞拓", "派高尔", "松下", "宇视", "景阳", "美电贝尔", "其他"}, message = "请正确选择设备厂商")
    private String deviceManufacturer;

    @ApiModelProperty("设备能力")
    @Size(min = 0, max = 32, message = "设备能力字符长度不能超过32个字符")
    @ValueInEnum(message = "请正确选择设备能力", allowedStringValues = {"高楼高清", "人脸抓拍", "枪球联动", "违停抓拍", "其他"})
    private String deviceAbility;

    @ApiModelProperty("设备标签")
    @Size(min = 0, max = 32, message = "设备标签字符长度不能超过32个字符")
    private String deviceTag;

    @ApiModelProperty("场所类型")
    @Size(min = 0, max = 32, message = "场所类型字符长度不能超过32个字符")
    @ValueInEnum(message = "请正确选择场所类型", allowedStringValues = {"景区", "商圈", "医院", "银行", "应急", "机关单位", "国有企业", "教育", "其他"})
    private String siteType;

    @ApiModelProperty("设备位置")
    @Size(min = 0, max = 32, message = "设备位置字符长度不能超过32个字符")
    private String deviceLocation;

    @ApiModelProperty("经纬度")
    @Size(min = 0, max = 32, message = "经纬度字符长度不能超过32个字符")
    private String deviceGps;

    @ApiModelProperty("所属组织")
    @Size(min = 0, max = 64, message = "所属组织字符长度不能超过64个字符")
    @ValueInEnum(message = "请正确选择所属组织", allowedStringValues = {"长沙市", "开福区", "天心区", "湘江新区", "宁乡市", "浏阳市", "望城区", "雨花区", "长沙县", "芙蓉区"})
    private String deptName;

    @ApiModelProperty("安装地点")
    @Size(min = 0, max = 255, message = "安装地点字符长度不能超过255个字符")
    private String installLocation;

    @ApiModelProperty("安装时间")
    private Date installTime;

    @ApiModelProperty("室内外")
    @ValueInEnum(allowedStringValues = {"室内", "室外"}, message = "请正确选择室内外")
    private String indoorAndOutdoor;

    @ApiModelProperty("监控方向")
    @ValueInEnum(allowedStringValues = {"东", "南", "西", "北", "北偏东", "北偏西", "南偏东", "南偏西"}, message = "请正确选择室内外")
    private String monitorDirection;

    @ApiModelProperty("监控方向角度")
    @BigDecimalRange(min = 0, max = 360, message = "请正确填写监控方向角度")
    private BigDecimal monitorDirectionAngle = BigDecimal.ZERO;

    @ApiModelProperty("监控视角区域")
    @BigDecimalRange(min = 0, max = 360, message = "请正确填写监控视角区域")
    private BigDecimal monitorViewingArea = BigDecimal.ZERO;

    @ApiModelProperty("设备监控视距")
    @BigDecimalRange(min = 0, max = 1000, message = "请正确填写设备监控视距")
    private BigDecimal monitorDistance = BigDecimal.ZERO;

    @ApiModelProperty("监控设备高度")
    private BigDecimal deviceMonitorHigh = BigDecimal.ZERO;

    @ApiModelProperty("高低点位")
    @ValueInEnum(allowedStringValues = {"高点", "低点"}, message = "请正确选择高低点位")
    private String highAndLowPoint;

    @ApiModelProperty("选填项目")
    @Size(min = 0, max = 100, message = "选填项目字符长度不能超过100个字符")
    private String optionalProject;

    @ApiModelProperty("自定义标签列表")
    @Size(min = 0, max = 5, message = "最多增加5个标签")
    private List<String> customTag;

    @ApiModelProperty("备注")
    @Size(min = 0, max = 100, message = "备注字符长度不能超过100个字符")
    private String remark;

    @ApiModelProperty("图片")
    @Size(min = 0, max = 3, message = "最多上传3张图片")
    private List<String> imageUrlList;
}
